﻿#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
using namespace std;
//8.加上这句后，内存对齐就是1个字节为基准，总内存变成4+8=12；
//#pragma pack(1)

class PersonMember
{											//1
public:
	//2.非静态成员变量，属于对象身上；		//4
	int m_A;
	//3.非静态成员函数，不属于对象身上；	//4
	void func() {}
	//4.静态成员变量，也不属于对象身上；	//4
	static int m_B;
	//5.静态成员函数，不属于对象身上；		//4
	static void funcStatic() {}
	//7.double是8个字节，内存对齐，int补成8个字节；
	double m_C;								//16 --> 12
};
//6.结论：只有非静态成员变量，才属于对象身上；
void testMemberVarFunc()
{
	//1.空类的大小为1；空类也可创建实例，每个实例的对象，都有独一无二的地址，char维护这个地址；
	cout << "sizeof(PersonMember)=" << sizeof(PersonMember) << endl;//1

	//9.this指针指向被调用的成员函数所属的对象；
	PersonMember p1;
	//10.编译器会偷偷加入一个this指针，PersonMember* this，即p1.func(PersonMember* this)；此时this为p1；
	p1.func();

	PersonMember p2;
	p2.func();
}

//main269：成员变量和成员函数分开存储
int main269()
{
	testMemberVarFunc();

	system("pause");
	return EXIT_SUCCESS;
}